package com.uvnos4j.matilda.commons.dto;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;

import java.util.Date;
import java.util.HashMap;

import static com.uvnos4j.matilda.commons.utils.RequestUtil.getString;

/**
 * 查询参数封装
 *
 * @author Guo.wl
 */
public class QueryParam extends HashMap<String, Object> {

    /**
     * 根据当前页码和每页条数组装分页信息
     *
     * @param pageNoParameter   当前页码Parameter
     * @param pageSizeParameter 每页条数Parameter
     * @return 分页信息
     */
    public PageParam getPageParamByNumAndSize(String pageNoParameter, String pageSizeParameter) {
        int pageNo = Convert.toInt(getIntegerValue(pageNoParameter), 1);
        int pageSize = Convert.toInt(getIntegerValue(pageSizeParameter), Integer.MAX_VALUE);
        return PageParam.buildByNumAndSize(pageNo, pageSize);
    }

    /**
     * 组装排序信息
     *
     * @param sortParameter   排序字段Parameter
     * @param orderParameter  排序方式Parameter
     * @param underlineToCase 是否要对排序字段将下划线转换为驼峰
     * @return 排序信息
     */
    public String getOrderBy(String sortParameter, String orderParameter, boolean underlineToCase) {
        String sortAndOrder = "";
        String sort = getStringValue(sortParameter);
        String order = getStringValue(orderParameter);

        return getString(sortAndOrder, sort, order, underlineToCase);
    }


    /**
     * 获取参数值
     *
     * @param paramKey 参数key
     * @return 参数值
     */
    public String getStringValue(String paramKey) {
        return (String) get(paramKey);
    }

    /**
     * 获取参数值
     *
     * @param paramKey 参数key
     * @return 参数值
     */
    public Integer getIntegerValue(String paramKey) {
        return Convert.toInt(get(paramKey));
    }

    /**
     * 获取参数值
     *
     * @param paramKey 参数key
     * @return 参数值
     */
    public Long getLongValue(String paramKey) {
        return Convert.toLong(get(paramKey));
    }

    /**
     * 获取参数值
     *
     * @param paramKey 参数key
     * @return 时间参数值[yyyy-MM-dd]
     */
    public Date getDayValue(String paramKey) {
        return getDateValue(paramKey, DatePattern.NORM_DATE_PATTERN);
    }

    /**
     * 获取参数值
     *
     * @param paramKey 参数key
     * @return 时间参数值[yyyy-MM-dd HH:mm:ss]
     */
    public Date getDaytimeValue(String paramKey) {
        return getDateValue(paramKey, DatePattern.NORM_DATETIME_PATTERN);
    }

    /**
     * 获取参数值
     *
     * @param paramKey 参数key
     * @param fmt      时间格式
     * @return 参数值
     */
    public Date getDateValue(String paramKey, String fmt) {
        String dateStr = (String) get(paramKey);
        if (StrUtil.isNotBlank(dateStr)) {
            return DateUtil.parse(dateStr, fmt);
        }
        return null;
    }

}